<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');
// load base class if needed
require_once( APPPATH . 'controllers/base/OperatorBase.php' );

class penyusutan extends ApplicationBase {

    // constructor
    public function __construct() {
        parent::__construct();
        // load model
        $this->load->model('m_pengadaan');
        $this->load->model('m_bagian');
        $this->load->model('m_lokasi');
        $this->load->model('m_barang');
        $this->load->model('m_group_barang');
        $this->load->model('m_kategoribarang');
        $this->load->model('m_jenisbarang');
        $this->load->model('m_merk');
        $this->load->model('m_pengajuan_barang');
        $this->load->model('m_penyusutan');
        $this->load->model('m_penyusutan_detail'); 
        $this->load->model('m_operator_mini');
        // load library
        $this->load->library('tnotification');
        $this->load->library('pagination');
        $this->load->library('datetimemanipulation');
        $this->smarty->assign("dtm", $this->datetimemanipulation);
        $this->load->library('phpexcel');
        // load helpers
        $this->smarty->load_javascript("resource/js/jquery/jquery-ui-1.9.2.custom.min.js");
        $this->smarty->load_style("jquery.ui/redmond/jquery-ui-1.8.13.custom.css");
    }

    // welcome administrator
    public function index() {
        $this->_set_page_rule("R");

        // set template content
        $this->smarty->assign("template_content", "inventarisasi/penyusutan/list.html");  
        /* start of pagination --------------------- */
        // pagination
        $config['base_url'] = site_url("inventarisasi/penyusutan/index/");
        $config['total_rows'] = $this->m_penyusutan->get_count_all_penyusutan();
        $config['uri_segment'] = 4;
        $config['per_page'] = 25;
        $this->pagination->initialize($config);
        $pagination['data'] = $this->pagination->create_links();
        // pagination attribute
        $start = $this->uri->segment(4, 0) + 1;
        $end = $this->uri->segment(4, 0) + $config['per_page'];
        $end = (($end > $config['total_rows']) ? $config['total_rows'] : $end);
        $pagination['start'] = ($config['total_rows'] == 0) ? 0 : $start;
        $pagination['end'] = $end;
        $pagination['total'] = $config['total_rows'];
        // pagination assign value
        $this->smarty->assign("pagination", $pagination);
        $this->smarty->assign("no", $start);
        /* end of pagination ---------------------- */
        // get data
        $params = array(($start - 1), $config['per_page']);
        $rs_id = $this->m_penyusutan->get_all_penyusutan_pagination($params);
        $this->smarty->assign("rs_id", $rs_id);
        
        $rs_tahun = $this->m_penyusutan->get_tahun_penyusutan();
        $this->smarty->assign("rs_tahun", $rs_tahun);
        
        // notification
        $this->tnotification->display_notification();
        $this->tnotification->display_last_field();

        // output
        parent::display();
    } 
    
    // Tambah
    public function add() {
        $this->_set_page_rule("R");
        // set template content
        $this->smarty->assign("template_content", "inventarisasi/penyusutan/add.html");
        // notification
        $this->tnotification->display_notification();
        $this->tnotification->display_last_field();
        // output
        parent::display();
    }
    
    // Penyusutan tambah
    public function penyusutan_add() {
        // cek input 
        $this->tnotification->set_rules('penyusutan_tgl', 'Tanggal', 'trim|required');
        $this->tnotification->set_rules('penyusutan_tgl_tmp', 'Tanggal', 'trim|required'); 

        // process 
        if ($this->tnotification->run() !== FALSE) { 
            $tahun = date('Y');
            $periode_penyusutan = $this->datetimemanipulation->get_date_indonesia($this->input->post('penyusutan_tgl_tmp'));
 
            //validasi hanya sampai 31-12-tahun ini. gak boleh 
            if($periode_penyusutan['tahun']>$tahun){
                // default error
                $this->tnotification->sent_notification("error", "Periode Penyusutan tidak boleh melebihi tahun ini");
            }else{
                if($this->m_penyusutan->get_penyusutan_masih_proses()>0){
                    // validasi jika sudah pernah dilakukan penyusutan pada tanggal kurang dari tanggal min penyusutan
                    $tgl_min_penyusutan = $this->m_penyusutan->get_max_tgl_penyusutan();
                    if($tgl_min_penyusutan!=''){
                        if($this->input->post('penyusutan_tgl_tmp')>$tgl_min_penyusutan){
                            // parameter
                            $tgl = $this->input->post('penyusutan_tgl_tmp');
                            $params = array(
                                $this->input->post('penyusutan_tgl_tmp'),
                                $this->input->post('penyusutan_keterangan'), 
                                '0',
                                $this->com_user['user_id']
                            );
                            // insert
                            if ($this->m_penyusutan->insert($params)) {
                                // id penyusutan
                                $id = $this->m_penyusutan->get_last_inserted_id(); 

                                // barang yg disusutkan tgl perolehannya kurang dari sama dengan tgl penyusutan
                                $rs_barang_penyusutan = $this->m_penyusutan->get_barang_penyusutan($tgl);
                                foreach ($rs_barang_penyusutan as $key => $barang) { 
                                    $penyusutandet_tgl_awal      = ($barang['barang_tglpenyusutan']=='') ? $barang['barang_tglbeli'] : $this->m_penyusutan->hitung_tanggal_awal_penyusutan($barang['barang_tglpenyusutan']);
                                    $jumlah_bulan_penyusutan     = $this->m_penyusutan->hitung_jumlah_bulan_penyusutan(array($penyusutandet_tgl_awal, $tgl));
                                    $sisa_bulan_penyusutan       = $this->m_penyusutan->hitung_jumlah_bulan_penyusutan(array($tgl, $barang['barang_tglberakhir']));

                                    if($sisa_bulan_penyusutan<$jumlah_bulan_penyusutan){
                                        $jumlah_bulan_penyusutan = $sisa_bulan_penyusutan;
                                    }
                                    $penyusutandet_nilai_akhir   = $barang['barang_nilai_buku'] - ($barang['perbulan']*$jumlah_bulan_penyusutan);
                                    $penyusutandet_tgl_akhir     = $this->m_penyusutan->get_next_tgl_penyusutan(array($penyusutandet_tgl_awal, $jumlah_bulan_penyusutan));

                                    $params = array(
                                        'penyusutan_id'             => $id, 
                                        'barang_id'                 => $barang['barang_id'], 
                                        'penyusutandet_tgl_awal'    => $penyusutandet_tgl_awal, 
                                        'penyusutandet_tgl_akhir'   => $penyusutandet_tgl_akhir, 
                                        'penyusutandet_jmlbulan'    => $jumlah_bulan_penyusutan,
                                        'penyusutandet_perbulan'    => $barang['perbulan'], 
                                        'penyusutandet_nilai_awal'  => $barang['barang_nilai_buku'], 
                                        'penyusutandet_nilai_akhir' => $penyusutandet_nilai_akhir, 
                                        'mdb'                       => $this->com_user['user_id']
                                    );
                                    $this->m_penyusutan->insert_detail_penyusutan($params);
                                } 
                                // notification
                                $this->tnotification->delete_last_field();
                                $this->tnotification->sent_notification("success", "Data berhasil disimpan");
                                // default redirect 
                                redirect("inventarisasi/penyusutan/konfirmasi/".$id);
                            } else {
                                // default error
                                $this->tnotification->sent_notification("error", "Data gagal disimpan");
                            }
                        }else{
                            // default error
                            $this->tnotification->sent_notification("error", "Periode Penyusutan ".$this->datetimemanipulation->get_full_date($this->input->post('penyusutan_tgl_tmp'))." telah dilakukan");
                        }
                    }else{
                        // parameter
                        $tgl = $this->input->post('penyusutan_tgl_tmp');
                        $params = array(
                            $this->input->post('penyusutan_tgl_tmp'),
                            $this->input->post('penyusutan_keterangan'), 
                            '0',
                            $this->com_user['user_id']
                        );
                        // insert
                        if ($this->m_penyusutan->insert($params)) {
                            // id penyusutan
                            $id = $this->m_penyusutan->get_last_inserted_id(); 

                            // barang yg disusutkan tgl perolehannya kurang dari sama dengan tgl penyusutan
                            $rs_barang_penyusutan = $this->m_penyusutan->get_barang_penyusutan($tgl);
                            foreach ($rs_barang_penyusutan as $key => $barang) { 
                                $penyusutandet_tgl_awal      = ($barang['barang_tglpenyusutan']=='') ? $barang['barang_tglbeli'] : $this->m_penyusutan->hitung_tanggal_awal_penyusutan($barang['barang_tglpenyusutan']);
                                $jumlah_bulan_penyusutan     = $this->m_penyusutan->hitung_jumlah_bulan_penyusutan(array($penyusutandet_tgl_awal, $tgl));
                                $sisa_bulan_penyusutan       = $this->m_penyusutan->hitung_jumlah_bulan_penyusutan(array($tgl, $barang['barang_tglberakhir']));

                                if($sisa_bulan_penyusutan<$jumlah_bulan_penyusutan){
                                    $jumlah_bulan_penyusutan = $sisa_bulan_penyusutan;
                                }
                                $penyusutandet_nilai_akhir   = $barang['barang_nilai_buku'] - ($barang['perbulan']*$jumlah_bulan_penyusutan);
                                $penyusutandet_tgl_akhir     = $this->m_penyusutan->get_next_tgl_penyusutan(array($penyusutandet_tgl_awal, $jumlah_bulan_penyusutan));

                                $params = array(
                                    'penyusutan_id'             => $id, 
                                    'barang_id'                 => $barang['barang_id'], 
                                    'penyusutandet_tgl_awal'    => $penyusutandet_tgl_awal, 
                                    'penyusutandet_tgl_akhir'   => $penyusutandet_tgl_akhir, 
                                    'penyusutandet_jmlbulan'    => $jumlah_bulan_penyusutan,
                                    'penyusutandet_perbulan'    => $barang['perbulan'], 
                                    'penyusutandet_nilai_awal'  => $barang['barang_nilai_buku'], 
                                    'penyusutandet_nilai_akhir' => $penyusutandet_nilai_akhir, 
                                    'mdb'                       => $this->com_user['user_id']
                                );
                                $this->m_penyusutan->insert_detail_penyusutan($params);
                            } 
                            // notification
                            $this->tnotification->delete_last_field();
                            $this->tnotification->sent_notification("success", "Data berhasil disimpan");
                            // default redirect 
                            redirect("inventarisasi/penyusutan/konfirmasi/".$id);
                        } else {
                            // default error
                            $this->tnotification->sent_notification("error", "Data gagal disimpan");
                        }
                    } 
                }else{
                    // default error
                    $this->tnotification->sent_notification("error", "Penyusutan sebelumnya belum selesai diproses");
                } 
            } 
        } 
        // default redirect
        redirect("inventarisasi/penyusutan/add");
    }
    
    public function konfirmasi($penyusutan_id) {
        $this->_set_page_rule("R");
        // set template content
        $this->smarty->assign("template_content", "inventarisasi/penyusutan/konfirmasi.html");
        
        $result_info = $this->m_penyusutan->get_by_id($penyusutan_id);
        $this->smarty->assign("result_info", $result_info);
        
        $rs_id = $this->m_penyusutan->get_barang_penyusutan_by_penyusutan_id($penyusutan_id);
        $this->smarty->assign("rs_id", $rs_id);
        // notification
        $this->tnotification->display_notification();
        $this->tnotification->display_last_field();
        // output
        parent::display();
    } 
    
    public function konfirmasi_procces(){
        // cek input 
        $this->tnotification->set_rules('penyusutan_id', 'ID', 'trim|required'); 

        // process 
        if ($this->tnotification->run() !== FALSE) { 
            $rs_id = $this->m_penyusutan->get_barang_penyusutan_by_penyusutan_id($this->input->post('penyusutan_id'));
            foreach ($rs_id as $key => $result) {
                $params = array(
                    'barang_nilai_buku'     => $result['penyusutandet_nilai_akhir'],
                    'barang_tglpenyusutan'  => $result['penyusutandet_tgl_akhir'],
                    'barang_id'             => $result['barang_id']
                );
                $this->m_penyusutan->update_penyusutan_barang($params);
            }
            $params = array(
                'penyusutan_status' => '1', 
                'penyusutan_id'     => $this->input->post('penyusutan_id')
            );
            $this->m_penyusutan->update_status($params);
        }else{
            // default error
            $this->tnotification->sent_notification("error", "Data gagal disimpan");
        }
        // default redirect
        redirect("inventarisasi/penyusutan/konfirmasi/".$this->input->post('penyusutan_id'));
    }
    
    // hitung masa berlaku
    public function hitung_masa_penyusutan() {
        $tanggal = $this->input->post('tanggal');
        $expired_date = $this->m_penyusutan->hitung_tanggal_penyusutan($tanggal);
        if ($expired_date) {
            echo $this->datetimemanipulation->get_full_date($expired_date);
        } else {
            echo "";
        }
    }

    // hitung masa berlaku
    public function get_hitung_masa_penyusutan($tanggal) {
        $expired_date = $this->m_penyusutan->hitung_tanggal_penyusutan($tanggal);
        if ($expired_date) {
            return $expired_date;
        } else {
            echo "";
        }
    }

    public function cetak_penyusutan($penyusutan_id = "") {
        // info penyusutan
        $result_info    = $this->m_penyusutan->get_by_id($penyusutan_id);
        // detail barang penyusutan
        $rs_id          = $this->m_penyusutan->get_barang_penyusutan_by_penyusutan_id($penyusutan_id);
        
        $style_border  = array(
            'borders' => array(
                'allborders' => array(
                'style' => PHPExcel_Style_Border::BORDER_THIN
                )
            ) 
        );
        
        $style_bold = array(
                'font' => array(
                        'bold' => true
                )
        );
        
        $style_barang = array(
                'font' => array(
                        'name' => 'Times New Roman',
                        'size' => 10 
                )
        );
        
        //create excel
        $filepath = "resource/doc/template/penyusutan.xls"; 
        
        //---
        $objReader = PHPExcel_IOFactory::createReader('Excel5');
        $this->phpexcel = $objReader->load($filepath);
        $objWorksheet = $this->phpexcel->setActiveSheetIndex(0);
        
        $tanggal = $this->datetimemanipulation->get_date_indonesia($result_info['penyusutan_tgl']); 
        
        
        $objWorksheet->setCellValue("B3", ' : '.$tanggal['tanggal'].' '.$tanggal['bulan'].' '.$tanggal['tahun']);
        $objWorksheet->setCellValue("B4", ' : '.$result_info['penyusutan_keterangan']);
        
        $row = 7;
        foreach ($rs_id as $key => $result) {
            $objWorksheet->setCellValue("A".$row, ($key+1));
            $objWorksheet->setCellValue("B".$row, $result['barang_noinventaris']);
            $objWorksheet->setCellValue("C".$row, $result['barang_nama']);
            $objWorksheet->setCellValue("D".$row, $result['penyusutandet_jmlbulan']);
            $objWorksheet->setCellValue("E".$row, number_format($result['penyusutandet_perbulan'], 0, '', '.'));
            $objWorksheet->setCellValue("F".$row, number_format($result['penyusutandet_nilai_awal'], 0, '', '.'));
            $objWorksheet->setCellValue("G".$row, number_format(($result['penyusutandet_jmlbulan']*$result['penyusutandet_perbulan']), 0, '', '.'));
            $objWorksheet->setCellValue("H".$row, number_format($result['penyusutandet_nilai_akhir'], 0, '', '.'));
            $objWorksheet->getStyle("D".$row.":H".$row)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
            
            $objWorksheet->getStyle("A" . $row.":H".$row)->applyFromArray($style_border);
            $row++;
        }
        
        $file_name = $result_info['penyusutan_id'].' '.$tanggal['tanggal'].' '.$tanggal['bulan'].' '.$tanggal['tahun'];
        $file_name = str_replace(" ", "_", $file_name);
        
        //--
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename=' . $file_name . '.xlsx');
        header('Cache-Control: max-age=0');
        // output
        $obj_writer = PHPExcel_IOFactory::createWriter($this->phpexcel, 'Excel2007');
        $obj_writer->save('php://output');
    }
}
